from pathlib import Path
from datetime import datetime


def traverse_directory(directory_path):
    """
    递归遍历目录，输出文件信息

    Args:
        directory_path (str): 要遍历的目录路径
    """
    try:
        # 创建Path对象
        path = Path(directory_path)

        # 检查目录是否存在
        if not path.exists():
            print(f"错误：目录 '{directory_path}' 不存在")
            return

        # 检查是否是目录
        if not path.is_dir():
            print(f"错误：'{directory_path}' 不是目录")
            return

        # 收集所有文件信息
        file_list = []
        _collect_files(path, file_list)

        # 按文件路径的字母顺序排序
        file_list.sort(key=lambda x: str(x['path']))

        # 输出文件信息
        for file_info in file_list:
            print(f"{file_info['path']},{file_info['size']},{file_info['mtime']}")

    except PermissionError:
        print(f"错误：没有权限访问目录 '{directory_path}'")
    except Exception as e:
        print(f"发生错误：{e}")


def _collect_files(current_path, file_list):
    """
    递归收集文件信息的辅助函数

    Args:
        current_path (Path): 当前路径对象
        file_list (list): 存储文件信息的列表
    """
    try:
        # 遍历当前目录下的所有项目
        for item in current_path.iterdir():
            # 跳过隐藏文件（以点开头的文件）
            if item.name.startswith('.'):
                continue

            if item.is_file():
                # 获取文件信息
                file_size = item.stat().st_size
                mtime_timestamp = item.stat().st_mtime
                mtime_formatted = datetime.fromtimestamp(mtime_timestamp).strftime('%Y-%m-%d %H:%M:%S')

                # 添加到文件列表
                file_list.append({
                    'path': item.absolute(),
                    'size': file_size,
                    'mtime': mtime_formatted
                })

            elif item.is_dir():
                # 递归遍历子目录
                _collect_files(item, file_list)

    except PermissionError:
        # 跳过没有权限的目录
        pass


def main():
    """主函数"""
    # 获取用户输入的目录路径
    directory_path = input("请输入要遍历的目录路径: ").strip()

    # 遍历目录并输出文件信息
    traverse_directory(directory_path)


if __name__ == "__main__":
    main()